﻿using System.Reflection;
using Autofac;
using AutoFacWebAPI.Service;

namespace AutoFacWebAPI
{

    //将注册服务独立出来
    public class BuilderRegistModule :Autofac.Module
    {
        protected override void Load(ContainerBuilder builder)
        {
            builder.RegisterType<DatabaseService>().As<IDatabaseService>();
                //.SingleInstance()   //为每次请求都使用同一个对象,单例模式
                //.InstancePerDependency() //每个依赖或者调用(Resolve())都创建一个新的对象,唯一的实例, 默认的注册方式
                // .InstancePerLifetimeScope() // 作用域生命周期： 在相同作用域下获取到的服务实例是相同的
                //.InstancePerRequest();  // 每次请求都创建一个实例，在一次请求中用到的是同一个实例
               // .PreserveExistingDefaults();  //如果实现该接口有多个类进行了注册，则默认使用该对象实例，如果不使用该方法Autofac将使用最后注册的组件作为服务的提供方


            //builder.RegisterGeneric(typeof(List<>)).As(typeof(IList<>));  //注册泛型类
            //builder.RegisterInstance<object>(new object()); // 直接注册一个实例

            
        }

        //反射程序集方式服务注册
        private void ReflectProgramAssembly(ContainerBuilder builder) 
        {            
            Assembly assembly = Assembly.Load("AutoFacWebAPI");
            builder.RegisterAssemblyTypes(assembly)
                .AsImplementedInterfaces()   //是以接口方式进行注入，注入这些类的所有的公共接口作为服务
                .InstancePerLifetimeScope(); //
        }
    }
}
